Brancher Sonar à Jest pour afficher la couverture de code du frontend

December 10, 2020

Avertissement! : Cet article étant à présent ancien, il semble que les dernières versions de Jest gèrent directement les rapports Sonar, il n’est donc plus utile de recourir à une librairie tierce. Merci de vous référer à la documentation.

Sonar est un outil de test de la qualité de code. Il se base sur un ensemble de règles qui ont une sévérité : code smell, bug, vulnerability, security hotspot. Sonar permet aussi d’afficher les résultats de la couverture de code, c’est à dire le pourcentage de lignes de code qui est testée dans l’application. Il ne se charge cependant pas du calcul à proprement parler.

Par exemple, pour un projet JAVA basé sur Maven, c’est en général le plugin Maven Jacoco qui se charge du calcul de la couverture. Il suffit de déclarer ce plug-in et le tour est joué. Pour l’analyse de code du frontend (basé bien souvent sur le langage Javascript, ou Typescript), il va falloir effectuer une conversion des rapports de couverture de code depuis Jest (l’outil de test frontend) vers Sonar. Nous allons voir comment.

Générer nos rapports de tests Jest

Flag coverage

Pour générer vos rapports de tests d’une application frontend via Jest, il faut ajouter le flag coverage. Cela va générer un répertoire coverage contenant tous les rapports de test au format Jest. La commande pour executer les et les rapports associés est donc :

npm run test --coverage

Flag watchAll

Nous ne voulons pas que nos tests s’executent en mode watch (bien que cette fonctionnalié peut s’avérer intéressante dans d’autres circonstances). Nouus allons donc la désactiver via la cxommande watchAll=false : Notre commande devient donc :

npm run test --coverage --watchAll=false

Conversion des rapports Jest vers Sonar

Nos rapports sont correctement générés dans le répertoire coverage, il faut donc les transformer en un format compréhensible par Sonar. C’est l’objet de la librairie jest-sonar-reporter. Il suffit d’ajouter le flag testResultsProcessor.

Notre commande devient donc:

npm run test --coverage --watchAll=false --testResultsProcessor=jest-sonar-reporter

Il faut aussi mettre à jour ou mettre à jour la configuration Sonar pour appeler le bon rapport : sonar.testExecutionReportPaths=test-report.xml (Par défaut le fichier généré par jest-sonar-reporter est test-report.xml.)

Lancer l’analyse Sonar, et le tour est joué! Vous devriez avoir vos beaux rapports de couverture de code Jest dans Sonar!


Hello, moi c'est Sylvain Maestri , développeur WEB fullstack avec 15 années d'expérience, en environnement Java / Spring pour le backend et Javascript / React pour le frontend. Je relate donc dans ce blog quelques trucs appris au fil de ces années, ça servira surement :).